const fp = require('lodash/fp')
// 数据
// horsepower 马力, dollar_value 价格, in_stock 库存
const cars = [{
        name: 'Ferrari FF',
        horsepower: 660,
        dollar_value: 700000,
        in_stock: true
    },
    {
        name: 'Spyker C12 Zagato',
        horsepower: 650,
        dollar_value: 648000,
        in_stock: false
    },
    {
        name: 'Jaguar XKR-S',
        horsepower: 550,
        dollar_value: 132000,
        in_stock: false
    },
    {
        name: 'Audi R8',
        horsepower: 625,
        dollar_value: 114200,
        in_stock: false
    },
    {
        name: 'Aston Martin One-7',
        horsepower: 750,
        dollar_value: 1850000,
        in_stock: true
    },
    {
        name: 'Pagani Huayara',
        horsepower: 700,
        dollar_value: 1300000,
        in_stock: true
    }
]



// 1、
function isLastInStock (res){
  const last_in_stock = fp.flowRight(fp.prop('in_stock'), fp.last)
  return last_in_stock(res)
}
console.log( isLastInStock(cars) )



// 2、
function isFirstInName (res){
  const first_in_name = fp.flowRight(fp.prop('name'), fp.first)
  return first_in_name(res)
}
console.log( isFirstInName(cars) )



// 3、
let _average = function (xs) {
  console.log(fp.reduce(fp.add, 0, xs))
  // 用于把集合中的结果相加求平均值
  return fp.reduce(fp.add, 0, xs) / xs.length
}

let averageDollarValue = function (res) {
  const val = fp.flowRight(_average, fp.map(x => x.dollar_value))
  return val(res)
}

console.log( averageDollarValue(cars) )



// 4、
let _underscore = fp.replace(/\W+/g, '_')

function sanitizeNames (res) {
  const val = fp.map(fp.flowRight(fp.toLower, _underscore, x => x.name))
  return val(res)
}

console.log( sanitizeNames(cars) )